const hello = (name: string) => {
  console.log(`Hello,${name}`)
}
hello('TypeScript')
// hello(100);

// 严格模式 string boolean 不能为空

const a: string = 'foobar'
const b: number = 100
const c: boolean = true // null
const d: void = undefined // null
const e: null = null
const f: undefined = undefined
const g: symbol = Symbol()
// Promise

const foo: object = function () {} // [] // {};
const obj: { foo: number; bar: string } = {
  foo: 123,
  bar: 'str',
}
// 限制对象类型=> 接口

// 数组类型
const arr1: Array<number> = [1, 2, 3]
const arr2: number[] = [1, 2, 3]
function sum(...args: number[]) {
  // 确保每个参数都是数字
  return args.reduce((prev, current) => prev + current, 0)
}
sum(1, 2, 3)

// 元组类型
const tuple: [number, string] = [18, 'zs']
const [age, surname] = tuple // 也可以用[0][1]索引
Object.entries({
  foo: 123,
  bar: 456,
})
// Object.entries返回的也是键值对数组 每个键值都是固定长度的元组

// 枚举
// 传统方法
// const PostStatus= {
//     Draft: 0,
//     Unpub:1,
//     Pub:2
// }
// 最开始没有等号后面不用冒号用等号
// 默认从0开始累加
// 字符串需要手动初始化!
// 改成常量枚举不会影响代码的执行结果
const enum PostStatus {
  Draft,
  Unpub,
  Pub,
}
// 枚举类型会入侵代码 会影响编译结果
const post = {
  title: 'hello',
  content: 'world',
  status: PostStatus.Draft, //PostStatus.Draft, // 0草稿 1未发布 2已发布 ,
}
// 最后变成一个
